import logging
from urllib.parse import urljoin

import allure
import requests
from requests import PreparedRequest, Response

logger = logging.getLogger('requests.seesion')
logging.basicConfig(level=logging.INFO)  # 日志级别


class Session(requests.Session):
    """
    1、支持BaseUrl
    2、支持日志记录
    """

    def __init__(self, base_url=''):
        super().__init__()  # 让对象按照原来的方式完成实例化--继承父类原有方法
        # 完成自定义代码
        self.base_url = base_url

    @allure.step('发送请求')
    def request(self, method, url, *args, **kwargs):
        if not url.startswith('http'):
            # 对url进行修改
            # 如果url不是以HTTP开头，就拼接baseurl
            url = urljoin(self.base_url, url)

        return super().request(method, url, *args, **kwargs)  # 仍然按照原有父类方法执行

    def send(self, request: PreparedRequest, *args, **kwargs) -> Response:
        logger.info(f'发送请求>>>>> 接口地址：{request.method} {request.url}')
        logger.debug(f'发送请求>>>>> 请求头：{request.headers}')
        logger.info(f'发送请求>>>>> 请求体：{request.body}')

        resp = super().send(request, *args, **kwargs)
        logger.info(f'接收响应     <<<<<< 状态码：{resp.status_code}')
        logger.debug(f'接收响应     <<<<<< 响应头：{resp.headers}')
        logger.info(f'接收响应     <<<<<< 响应体：{resp.content}')

        return resp
